package com.jinzhi.jzweb.utils;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import javax.validation.constraints.NotNull;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class PdfUtil {




    /*
     * PDF转图片
     * @attention: 将整个PDF文件转图片（所有页）
     * @date: 2021-05-12 10:46
     * @param: imgPath
     * 图片全路径
     * @param: imgNamePrefix
     * 图片名称前缀
     * @param: pdfBytes
     * PDF二进制流
     * @return: boolean
     */
    public static boolean toImageFromBytes(String imgPath, String imgNamePrefix, byte[] pdfBytes ,String uploadPath) {
        return toImageFromBytes(uploadPath, imgPath, imgNamePrefix, pdfBytes, "png", 0, -1);
    }


    /*
     * PDF转图片
     * @attention: 支持自主选择起始页和结束页
     * @date: 2021-06-8 10:41
     * @param: imgPath
     * 图片全路径
     * @param: imgNamePrefix
     * 图片名称前缀
     * @param: pdfBytes
     * PDF二进制流
     * @param: imgType
     * 图片类型
     * @param: pageStartIndex
     * 开始页：开始转换的页码（第1页，页码为0）
     * @param: pageEndIndex
     * 结束页：结束转换的页码（最后1页，页码为-1）
     * @return: boolean
     * 只有PDF文件所有页数转换成功才返回true
     */
    public static boolean toImageFromBytes(String uploadPath, String imgPath, @NotNull String imgNamePrefix, byte[] pdfBytes, String imgType, int pageStartIndex, int pageEndIndex) {
        boolean isSuccess = false;
        System.out.println("000000000122222222222:"+imgPath+"  "+imgNamePrefix);
        // 图片名称处理（注意文件名里不要有点，否则一律视为后缀名被抹掉）
        if (imgNamePrefix.indexOf(".") > 0) imgNamePrefix = imgNamePrefix.substring(0, imgNamePrefix.indexOf(".") );

        // 添加路径分隔符
        // if (!imgPath.endsWith("/") && !imgPath.endsWith("\\")) imgPath += File.separator;

        try {
            // 加载PDF
            PDDocument doc = PDDocument.load(pdfBytes);
            PDFRenderer renderer = new PDFRenderer(doc);
            // pdf总页数
            int pageCount = doc.getNumberOfPages();
            System.out.println("该pdf文件共有" + pageCount + "页");
            for (int i = 0; i < pageCount; i++) {
                // dpi越大转换后越清晰，但转换速度越慢
                BufferedImage image = renderer.renderImageWithDPI(i, 250); // Windows native DPI
                // BufferedImage srcImage = resize(image, 240, 240);//产生缩略图
                File newImg;
                // 生成图片
                if (pageCount == 1)
                    newImg = new File(imgPath + imgNamePrefix+ "_" + 1 + "." + imgType);
                else
                    newImg = new File(imgPath + imgNamePrefix + "_" + (i + 1) + "." + imgType);

                ImageIO.write(image, imgType, newImg);

                System.out.println("pdf第" + (i + 1) + "页转图片成功");
            }
            isSuccess = true;
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("pdf-->;图片失败：" + e.getMessage());
        }

        System.out.println("pdf-->;图片成功");
        return isSuccess;
    }


}
